Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>S3 Texture Compression</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/S3_Texture_Compression"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-S3_Texture_Compression rootpage-S3_Texture_Compression skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">S3 Texture Compression</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */


.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}


/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above summary">S3 Texture Compression (S3TC)</th></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Programmer" title="Programmer">Developer(s)</a></th><td class="infobox-data"><a href="S3_Graphics" title="S3 Graphics">S3 Graphics</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Initial release</th><td class="infobox-data">1998<span style="display:none">&nbsp;(<span class="bday dtstart published updated">1998</span>)</span></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Operating_system" title="Operating system">Operating system</a></th><td class="infobox-data"><a href="Microsoft_Windows" title="Microsoft Windows">Microsoft Windows</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_categories#Categorization_approaches" title="Software categories">Type</a></th><td class="infobox-data"><a href="Texture_compression" title="Texture compression">texture compression</a></td></tr></tbody></table>
<p><b>S3 Texture Compression</b> (<b>S3TC</b>) (sometimes also called <b>DXTn</b>, <b>DXTC</b>, or <b>BCn</b>) is a group of related <a href="Lossy_compression" title="Lossy compression">lossy</a> <a href="Texture_compression" title="Texture compression">texture compression</a> <a href="Algorithm" title="Algorithm">algorithms</a> originally developed by Iourcha et al. of <a href="S3_Graphics" title="S3 Graphics">S3 Graphics, Ltd.</a><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> for use in their <a href="Savage_3D" class="mw-redirect" title="Savage 3D">Savage 3D</a> <a href="Computer_graphics_accelerator" class="mw-redirect" title="Computer graphics accelerator">computer graphics accelerator</a>. The method of compression is strikingly similar to the previously published <a href="Color_Cell_Compression" title="Color Cell Compression">Color Cell Compression</a>,<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> which is in turn an adaptation of <a href="Block_Truncation_Coding" title="Block Truncation Coding">Block Truncation Coding</a> published in the late 1970s. Unlike some image compression algorithms (e.g. <a href="JPEG" title="JPEG">JPEG</a>), S3TC's fixed-rate data compression coupled with the single memory access (cf. Color Cell Compression and some <a href="Vector_quantization" title="Vector quantization">VQ</a>-based schemes) made it well-suited for use in compressing <a href="Texture_mapping" title="Texture mapping">textures</a> in hardware-accelerated <a href="3D_computer_graphics" title="3D computer graphics">3D computer graphics</a>. Its subsequent inclusion in <a href="Microsoft" title="Microsoft">Microsoft</a>'s <a href="DirectX" title="DirectX">DirectX</a> 6.0 and <a href="OpenGL" title="OpenGL">OpenGL</a> 1.3 (via the GL_EXT_texture_compression_s3tc <a href="OpenGL#Development" title="OpenGL">extension</a>) led to widespread adoption of the technology among hardware and software makers. While S3 Graphics is no longer a competitor in the graphics accelerator market, license fees have been levied and collected for the use of S3TC technology until October 2017, for example in <a href="Game_console" class="mw-redirect" title="Game console">game consoles</a> and graphics cards. The wide use of S3TC has led to a <a href="De_facto" title="De facto">de facto</a> requirement for OpenGL drivers to support it, but the patent-encumbered status of S3TC presented a major obstacle to <a href="Open-source_software" title="Open-source software">open source</a> implementations,<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> while implementation approaches which tried to avoid the patented parts existed.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Patent">Patent</h2></div>
<p>Some (e.g. US 5956431 A) of the multiple USPTO patents on S3 Texture Compression expired on October 2, 2017.<sup id="cite_ref-lwn-714524_6-0" class="reference"><a href="#cite_note-lwn-714524-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> At least one continuation patent, <a rel="nofollow" class="external text" href="https://docs.google.com/viewer?url=patentimages.storage.googleapis.com/pdfs/US6775417.pdf">US6,775,417</a>, however had a 165-day extension. This continuation patent expired on March 16, 2018.
</p>
<div class="mw-heading mw-heading2"><h2 id="Codecs">Codecs</h2></div>
<p>There are five variations of the S3TC algorithm (named <b>DXT1</b> through <b>DXT5</b>, referring to the <a href="FourCC" title="FourCC">FourCC</a> code assigned by Microsoft to each format), each designed for specific types of image data. All convert a 4×4 block of <a href="Pixel" title="Pixel">pixels</a> to a 64-<a href="Bit" title="Bit">bit</a> or 128-bit quantity, resulting in compression ratios of 6:1 with 24-bit <a href="RGB_color_space" class="mw-redirect" title="RGB color space">RGB</a> input data or 4:1 with 32-bit <a href="RGBA_color_space" class="mw-redirect" title="RGBA color space">RGBA</a> input data. S3TC is a <a href="Lossy_data_compression" class="mw-redirect" title="Lossy data compression">lossy</a> compression algorithm, resulting in image quality degradation, an effect which is minimized by the ability to increase texture resolutions while maintaining the same memory requirements. Hand-drawn cartoon-like images do not compress well, nor do <a href="Normal_mapping" title="Normal mapping">normal map</a> data, both of which usually generate <a href="Compression_artifacts" class="mw-redirect" title="Compression artifacts">artifacts</a>. <a href="ATI_Technologies" title="ATI Technologies">ATI</a>'s <a href="3Dc" title="3Dc">3Dc</a> compression algorithm is a modification of DXT5 designed to overcome S3TC's shortcomings with regard to normal maps. <a href="Id_Software" title="Id Software">id Software</a> worked around the normalmap compression issues in <i><a href="Doom_3" title="Doom 3">Doom 3</a></i> by moving the red component into the alpha channel before compression and moving it back during rendering in the <a href="Pixel_shader" class="mw-redirect" title="Pixel shader">pixel shader</a>.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p><p>Like many modern image compression algorithms, S3TC only specifies the method used to decompress images, allowing implementers to design the compression algorithm to suit their specific needs, although the patent still covers compression algorithms. The <a href="Nvidia" title="Nvidia">nVidia</a> GeForce 256 through to GeForce 4 cards also used 16-bit interpolation to render DXT1 textures, which resulted in banding when unpacking textures with color gradients. Again, this created an unfavorable impression of <a href="Texture_compression" title="Texture compression">texture compression</a>, not related to the fundamentals of the codec itself.
</p>
<div class="mw-heading mw-heading2"><h2 id="DXT1">DXT1</h2></div>
<p>DXT1 (also known as Block Compression 1 or BC1) is the smallest variation of S3TC, storing 16 input pixels in 64 bits of output, consisting of two 16-bit RGB 5:6:5 color values <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c_{0}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle c_{0}}</annotation>
</semantics>
</math></span><img src="./1882ba8f1dc60f0c68a642abb5af093c73910921.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.061ex; height:2.009ex;" alt="{\displaystyle c_{0}}" loading="lazy"></span> and <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c_{1}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle c_{1}}</annotation>
</semantics>
</math></span><img src="./77b7dc6d279091d354e0b90889b463bfa7eb7247.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.061ex; height:2.009ex;" alt="{\displaystyle c_{1}}" loading="lazy"></span>, and a 4×4 two-bit lookup table.
</p><p>If <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c_{0}>c_{1}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>&gt;</mo>
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle c_{0}&gt;c_{1}}</annotation>
</semantics>
</math></span><img src="./a4e7c49f5b8e0e7ab666e8eae073dda824a6898e.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:7.221ex; height:2.176ex;" alt="{\displaystyle c_{0}>c_{1}}" loading="lazy"></span>(compare these colors by interpreting them as two 16-bit unsigned numbers), then two other colors are calculated, such that for each component, <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle c_{2}={2 \over 3}c_{0}+{1 \over 3}c_{1}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>2</mn>
<mn>3</mn>
</mfrac>
</mrow>
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mn>3</mn>
</mfrac>
</mrow>
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle c_{2}={2 \over 3}c_{0}+{1 \over 3}c_{1}}</annotation>
</semantics>
</math></span><img src="./5fe4432406fa98d4c9531ebf034bfcab2f896d86.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:15.438ex; height:3.676ex;" alt="{\textstyle c_{2}={2 \over 3}c_{0}+{1 \over 3}c_{1}}" loading="lazy"></span> and <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle c_{3}={1 \over 3}c_{0}+{2 \over 3}c_{1}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>3</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mn>3</mn>
</mfrac>
</mrow>
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>2</mn>
<mn>3</mn>
</mfrac>
</mrow>
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle c_{3}={1 \over 3}c_{0}+{2 \over 3}c_{1}}</annotation>
</semantics>
</math></span><img src="./a9566557c693eaa8b6ca23c80f7bf1aa2239e2e2.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:15.438ex; height:3.676ex;" alt="{\textstyle c_{3}={1 \over 3}c_{0}+{2 \over 3}c_{1}}" loading="lazy"></span>.
This mode operates similarly to mode 0xC0 of the <a href="Apple_Video" title="Apple Video">original Apple Video codec</a>.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p><p>Otherwise, if <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c_{0}\leq c_{1}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>≤<!-- ≤ --></mo>
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle c_{0}\leq c_{1}}</annotation>
</semantics>
</math></span><img src="./b0a6a175898e37b08bf8b65e8f56831e0c2047a2.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:7.221ex; height:2.343ex;" alt="{\displaystyle c_{0}\leq c_{1}}" loading="lazy"></span>, then <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle c_{2}={1 \over 2}c_{0}+{1 \over 2}c_{1}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mn>2</mn>
</mfrac>
</mrow>
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mn>1</mn>
<mn>2</mn>
</mfrac>
</mrow>
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle c_{2}={1 \over 2}c_{0}+{1 \over 2}c_{1}}</annotation>
</semantics>
</math></span><img src="./f56d2d00b117e35ddc4a87de693ad5b5a1064f6c.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.171ex; width:15.438ex; height:3.509ex;" alt="{\textstyle c_{2}={1 \over 2}c_{0}+{1 \over 2}c_{1}}" loading="lazy"></span> and <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c_{3}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>3</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle c_{3}}</annotation>
</semantics>
</math></span><img src="./b1dc52bfbaf6e577fbed72a716068f4533700bd3.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.061ex; height:2.009ex;" alt="{\displaystyle c_{3}}" loading="lazy"></span> is transparent black corresponding to a <a href="Alpha_compositing" title="Alpha compositing">premultiplied alpha format</a>. This color sometimes causes a black border surrounding the transparent area when linear texture filtering and alpha test is used, due to colors being interpolated between the color of opaque texel and neighbouring black transparent texel.
</p><p>The lookup table is then consulted to determine the color value for each pixel, with a value of 0 corresponding to <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c_{0}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle c_{0}}</annotation>
</semantics>
</math></span><img src="./1882ba8f1dc60f0c68a642abb5af093c73910921.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.061ex; height:2.009ex;" alt="{\displaystyle c_{0}}" loading="lazy"></span> and a value of 3 corresponding to <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c_{3}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>3</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle c_{3}}</annotation>
</semantics>
</math></span><img src="./b1dc52bfbaf6e577fbed72a716068f4533700bd3.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.061ex; height:2.009ex;" alt="{\displaystyle c_{3}}" loading="lazy"></span>.
</p>
<div class="mw-heading mw-heading2"><h2 id="DXT2_and_DXT3">DXT2 and DXT3</h2></div>
<p>DXT2 and DXT3 (collectively also known as Block Compression 2 or BC2) converts 16 input pixels (corresponding to a 4x4 pixel block) into 128 bits of output, consisting of 64 bits of <a href="Alpha_channel" class="mw-redirect" title="Alpha channel">alpha channel</a> data (4 bits for each pixel) followed by 64 bits of color data, encoded the same way as DXT1 (with the exception that the 4-color version of the DXT1 algorithm is always used instead of deciding which version to use based on the relative values of <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c_{0}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle c_{0}}</annotation>
</semantics>
</math></span><img src="./1882ba8f1dc60f0c68a642abb5af093c73910921.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.061ex; height:2.009ex;" alt="{\displaystyle c_{0}}" loading="lazy"></span> and <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle c_{1}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>c</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle c_{1}}</annotation>
</semantics>
</math></span><img src="./77b7dc6d279091d354e0b90889b463bfa7eb7247.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.061ex; height:2.009ex;" alt="{\displaystyle c_{1}}" loading="lazy"></span>).
</p><p>In DXT2, the color data is interpreted as being <a href="Premultiplied_by_alpha" class="mw-redirect" title="Premultiplied by alpha">premultiplied by alpha</a>, in DXT3 it is interpreted as not having been premultiplied by alpha. Typically DXT2/3 are well suited to images with sharp alpha transitions, between translucent and opaque areas.
</p>
<div class="mw-heading mw-heading2"><h2 id="DXT4_and_DXT5">DXT4 and DXT5</h2></div>
<p>DXT4 and DXT5 (collectively also known as Block Compression 3 or BC3) converts 16 input pixels into 128 bits of output, consisting of 64 bits of alpha channel data (two 8-bit alpha values and a 4×4 3-bit lookup table) followed by 64 bits of color data (encoded the same way as DXT1).
</p><p>If <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \alpha _{0}>\alpha _{1}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>&gt;</mo>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \alpha _{0}&gt;\alpha _{1}}</annotation>
</semantics>
</math></span><img src="./0a60f78c05cca63bc200ab90d04ec3e4ddade254.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:8.182ex; height:2.176ex;" alt="{\displaystyle \alpha _{0}>\alpha _{1}}" loading="lazy"></span>, then six other alpha values are calculated, such that <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \alpha _{2}={{6\alpha _{0}+1\alpha _{1}} \over 7}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow class="MJX-TeXAtom-ORD">
<mn>6</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>1</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mn>7</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle \alpha _{2}={{6\alpha _{0}+1\alpha _{1}} \over 7}}</annotation>
</semantics>
</math></span><img src="./6f4c98b4f3c61155c4b8512c3cad20c6572d370c.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:13.166ex; height:4.009ex;" alt="{\textstyle \alpha _{2}={{6\alpha _{0}+1\alpha _{1}} \over 7}}" loading="lazy"></span>, <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \alpha _{3}={{5\alpha _{0}+2\alpha _{1}} \over 7}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>3</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow class="MJX-TeXAtom-ORD">
<mn>5</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>2</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mn>7</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle \alpha _{3}={{5\alpha _{0}+2\alpha _{1}} \over 7}}</annotation>
</semantics>
</math></span><img src="./6c04b1746d0c09eeaec6b896670d031a45de2029.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:13.166ex; height:4.009ex;" alt="{\textstyle \alpha _{3}={{5\alpha _{0}+2\alpha _{1}} \over 7}}" loading="lazy"></span>, <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \alpha _{4}={{4\alpha _{0}+3\alpha _{1}} \over 7}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>4</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow class="MJX-TeXAtom-ORD">
<mn>4</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>3</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mn>7</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle \alpha _{4}={{4\alpha _{0}+3\alpha _{1}} \over 7}}</annotation>
</semantics>
</math></span><img src="./60b8d9765cf699604507446505be127fb06b40d4.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:13.166ex; height:4.176ex;" alt="{\textstyle \alpha _{4}={{4\alpha _{0}+3\alpha _{1}} \over 7}}" loading="lazy"></span>, <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \alpha _{5}={{3\alpha _{0}+4\alpha _{1}} \over 7}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>5</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow class="MJX-TeXAtom-ORD">
<mn>3</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>4</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mn>7</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle \alpha _{5}={{3\alpha _{0}+4\alpha _{1}} \over 7}}</annotation>
</semantics>
</math></span><img src="./4c5221cd79a120c5e654b1319a6d5b1e5877459f.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:13.166ex; height:4.176ex;" alt="{\textstyle \alpha _{5}={{3\alpha _{0}+4\alpha _{1}} \over 7}}" loading="lazy"></span>, <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \alpha _{6}={{2\alpha _{0}+5\alpha _{1}} \over 7}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>6</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>5</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mn>7</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle \alpha _{6}={{2\alpha _{0}+5\alpha _{1}} \over 7}}</annotation>
</semantics>
</math></span><img src="./b795323c5680f86ca3c39ba2cc392d4b17e052ac.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:13.166ex; height:4.009ex;" alt="{\textstyle \alpha _{6}={{2\alpha _{0}+5\alpha _{1}} \over 7}}" loading="lazy"></span>, and <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \alpha _{7}={{1\alpha _{0}+6\alpha _{1}} \over 7}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>7</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>6</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mn>7</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle \alpha _{7}={{1\alpha _{0}+6\alpha _{1}} \over 7}}</annotation>
</semantics>
</math></span><img src="./96ef1da694c0af6b8e25dd5bd644304b2d54a3f5.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:13.166ex; height:4.009ex;" alt="{\textstyle \alpha _{7}={{1\alpha _{0}+6\alpha _{1}} \over 7}}" loading="lazy"></span>.
</p><p>Otherwise, if <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \alpha _{0}\leq \alpha _{1}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>≤<!-- ≤ --></mo>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle \alpha _{0}\leq \alpha _{1}}</annotation>
</semantics>
</math></span><img src="./c9bb910b2ca4b055eeb547beb830d4a5cdcbf126.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:8.182ex; height:2.343ex;" alt="{\textstyle \alpha _{0}\leq \alpha _{1}}" loading="lazy"></span>, four other alpha values are calculated such that <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \alpha _{2}={{4\alpha _{0}+1\alpha _{1}} \over 5}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow class="MJX-TeXAtom-ORD">
<mn>4</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>1</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mn>5</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle \alpha _{2}={{4\alpha _{0}+1\alpha _{1}} \over 5}}</annotation>
</semantics>
</math></span><img src="./30c0f1cdb763b474db8575cae4bcacb8569eb0fd.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:13.166ex; height:4.176ex;" alt="{\textstyle \alpha _{2}={{4\alpha _{0}+1\alpha _{1}} \over 5}}" loading="lazy"></span>, <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \alpha _{3}={{3\alpha _{0}+2\alpha _{1}} \over 5}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>3</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow class="MJX-TeXAtom-ORD">
<mn>3</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>2</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mn>5</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle \alpha _{3}={{3\alpha _{0}+2\alpha _{1}} \over 5}}</annotation>
</semantics>
</math></span><img src="./33040f3ff9c3e9c842f21c4383cd0bc137c7d2f7.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:13.166ex; height:4.009ex;" alt="{\textstyle \alpha _{3}={{3\alpha _{0}+2\alpha _{1}} \over 5}}" loading="lazy"></span>, <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \alpha _{4}={{2\alpha _{0}+3\alpha _{1}} \over 5}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>4</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>3</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mn>5</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle \alpha _{4}={{2\alpha _{0}+3\alpha _{1}} \over 5}}</annotation>
</semantics>
</math></span><img src="./0d190a73b95187123356a3ee577710cb6a625990.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:13.166ex; height:4.009ex;" alt="{\textstyle \alpha _{4}={{2\alpha _{0}+3\alpha _{1}} \over 5}}" loading="lazy"></span>, and <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \alpha _{5}={{1\alpha _{0}+4\alpha _{1}} \over 5}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="false" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>5</mn>
</mrow>
</msub>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>4</mn>
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>1</mn>
</mrow>
</msub>
</mrow>
<mn>5</mn>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\textstyle \alpha _{5}={{1\alpha _{0}+4\alpha _{1}} \over 5}}</annotation>
</semantics>
</math></span><img src="./4793f7cabb17f24fd7bb31dc414d2dd36aae0408.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:13.166ex; height:4.176ex;" alt="{\textstyle \alpha _{5}={{1\alpha _{0}+4\alpha _{1}} \over 5}}" loading="lazy"></span> with <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \alpha _{6}=0}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>6</mn>
</mrow>
</msub>
<mo>=</mo>
<mn>0</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \alpha _{6}=0}</annotation>
</semantics>
</math></span><img src="./35b78e2cd3b1029b076b4bc4ab22ff70023dad9d.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:6.803ex; height:2.509ex;" alt="{\displaystyle \alpha _{6}=0}" loading="lazy"></span> and <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \alpha _{7}=255}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>7</mn>
</mrow>
</msub>
<mo>=</mo>
<mn>255</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \alpha _{7}=255}</annotation>
</semantics>
</math></span><img src="./a333edced819005b1fd090317df2b843d9b2d0d7.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:9.128ex; height:2.509ex;" alt="{\displaystyle \alpha _{7}=255}" loading="lazy"></span>.
</p><p>The lookup table is then consulted to determine the alpha value for each pixel, with a value of 0 corresponding to <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \alpha _{0}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>0</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \alpha _{0}}</annotation>
</semantics>
</math></span><img src="./a214eff2fcc322f780dd8837e7472b0edb994a13.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.542ex; height:2.009ex;" alt="{\displaystyle \alpha _{0}}" loading="lazy"></span> and a value of 7 corresponding to <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \alpha _{7}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>α<!-- α --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>7</mn>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \alpha _{7}}</annotation>
</semantics>
</math></span><img src="./debd839cbfa4e4e305562172ef8fc3d3667395c1.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.542ex; height:2.009ex;" alt="{\displaystyle \alpha _{7}}" loading="lazy"></span>. DXT4's color data is premultiplied by alpha, whereas DXT5's is not. Because DXT4/5 use an interpolated alpha scheme, they generally produce superior results for alpha (transparency) gradients than DXT2/3.
</p>
<div class="mw-heading mw-heading2"><h2 id="Further_variants">Further variants</h2></div>
<div class="mw-heading mw-heading3"><h3 id="BC4_and_BC5">BC4 and BC5</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="3Dc" title="3Dc">3Dc</a></div>
<p>BC4 and BC5 (Block Compression 4 and 5) are added in Direct3D 10. They reuse the alpha channel encoding found in DXT4/5 (BC3).<sup id="cite_ref-reed_9-0" class="reference"><a href="#cite_note-reed-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>BC4 stores 16 input single-channel (e.g. greyscale) pixels into 64 bits of output, encoded in nearly<sup id="cite_ref-ryg_10-0" class="reference"><a href="#cite_note-ryg-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> the same way as BC3 alphas. The expanded palette provides higher quality.</li>
<li>BC5 stores 16 input double-channel (e.g. tangent space normal map) pixels into 128 bits of output, consisting of two halves each encoded like BC4.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="BC6H_and_BC7">BC6H and BC7</h3></div>
<p>BC6H (sometimes BC6) and BC7 (Block Compression 6H and 7) are added in Direct3D 11.<sup id="cite_ref-reed_9-1" class="reference"><a href="#cite_note-reed-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>BC6H encodes 16 input RGB HDR (float16) pixels into 128 bits of output. It essentially treats float16 as 16 sign-magnitude integer value and interpolates such integers linearly. It works well for blocks without sign changes. A total of 14 modes are defined, though most differ minimally: only two prediction modes are really used.<sup id="cite_ref-ryg_10-1" class="reference"><a href="#cite_note-ryg-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup></li>
<li>BC7 encodes 16 input RGB8/RGBA8 pixels into 128 bits of output. It can be understood as a much-enhanced BC3.<sup id="cite_ref-ryg_10-2" class="reference"><a href="#cite_note-ryg-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup></li></ul>
<p>BC6H and BC7 have a much more complex algorithm with a selection of encoding modes. The quality is much better as a result.<sup id="cite_ref-reed_9-2" class="reference"><a href="#cite_note-reed-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> These two modes are also specified much more exactly, with ranges of accepted deviation. Earlier BCn modes decode slightly differently among GPU vendors.<sup id="cite_ref-ryg_10-3" class="reference"><a href="#cite_note-ryg-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="S3TC_format_comparison">S3TC format comparison</h2></div>
<table class="wikitable" style="text-align:center;">

<tbody><tr>
<th>FOURCC
</th>
<th>DX 10/11 name
</th>
<th>Description
</th>
<th>Alpha premultiplied?
</th>
<th>Compression ratio
</th>
<th>Texture type
</th></tr>
<tr>
<td>DXT1</td>
<td>BC1</td>
<td>1-bit alpha / opaque</td>
<td>Yes</td>
<td>6:1 (for 24-bit source image)</td>
<td>Simple non-alpha
</td></tr>
<tr>
<td>DXT2</td>
<td>BC2</td>
<td>Explicit alpha</td>
<td>Yes</td>
<td>4:1</td>
<td>Sharp alpha
</td></tr>
<tr>
<td>DXT3</td>
<td>BC2</td>
<td>Explicit alpha</td>
<td>No</td>
<td>4:1</td>
<td>Sharp alpha
</td></tr>
<tr>
<td>DXT4</td>
<td>BC3</td>
<td>Interpolated alpha</td>
<td>Yes</td>
<td>4:1</td>
<td>Gradient alpha
</td></tr>
<tr>
<td>DXT5</td>
<td>BC3</td>
<td>Interpolated alpha</td>
<td>No</td>
<td>4:1</td>
<td>Gradient alpha
</td></tr>
<tr>
<td data-sort-value="" style="background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: center;" class="table-na">—</td>
<td>BC4</td>
<td>Interpolated greyscale</td>
<td data-sort-value="" style="background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: center;" class="table-na">—</td>
<td>2:1</td>
<td>Gradient
</td></tr>
<tr>
<td data-sort-value="" style="background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: center;" class="table-na">—</td>
<td>BC5</td>
<td>Interpolated two-channel</td>
<td data-sort-value="" style="background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: center;" class="table-na">—</td>
<td>2:1</td>
<td>Gradient
</td></tr>
<tr>
<td data-sort-value="" style="background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: center;" class="table-na">—</td>
<td>BC6H</td>
<td>Interpolated HDR (no alpha)</td>
<td data-sort-value="" style="background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: center;" class="table-na">—</td>
<td>6:1</td>
<td>Gradient
</td></tr>
<tr>
<td data-sort-value="" style="background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: center;" class="table-na">—</td>
<td>BC7</td>
<td>Interpolated alpha</td>
<td>?</td>
<td>4:1</td>
<td>Gradient
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Data_preconditioning">Data preconditioning</h2></div>
<p>BCn textures can be further compressed for on-disk storage and distribution (<a href="Texture_supercompression" class="mw-redirect" title="Texture supercompression">texture supercompression</a>). An application would decompress this extra layer and send the BCn data to the GPU as usual.
</p><p>BCn can be combined with Oodle Texture, a lossy preprocessor that modifies the input texture so that the BCn output is more easily compressed by a <a href="LZ77" class="mw-redirect" title="LZ77">LZ77</a> compressor (<a href="Rate-distortion_optimization" class="mw-redirect" title="Rate-distortion optimization">rate-distortion optimization</a>). BC7 specifically can also use "bc7prep", a lossless pass to re-encode the texture in a more compressible form (requiring its inverse at decompression).<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>
</p><p>crunch is another tool that performs RDO and optionally further re-encoding.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
</p><p>In 2021, Microsoft produced a "BCPack" compression algorithm specifically for BCn-compressed textures. Xbox series X and S have hardware support for decompressing BCPack streams.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="S2TC" title="S2TC">S2TC</a>, patentless workaround</li>
<li><a href="FXT1" title="FXT1">FXT1</a></li>
<li><a href="DirectDraw_Surface" title="DirectDraw Surface">DirectDraw Surface</a></li>
<li><a href="PVRTC" title="PVRTC">PVRTC</a></li>
<li><a href="Adaptive_Scalable_Texture_Compression" class="mw-redirect" title="Adaptive Scalable Texture Compression">Adaptive Scalable Texture Compression</a> (ASTC)</li>
<li><a href="Ericsson_Texture_Compression" title="Ericsson Texture Compression">Ericsson Texture Compression</a> (ETC1 &amp; ETC2)</li>
<li><a href="Color_Cell_Compression" title="Color Cell Compression">Color Cell Compression</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1041539562">
/* start https://en.wikipedia.org/ */


.mw-parser-output .citation{word-wrap:break-word}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}


/* end https://en.wikipedia.org/ */
</style><span class="citation patent"><a rel="nofollow" class="external text" href="https://worldwide.espacenet.com/textdoc?DB=EPODOC&amp;IDX=US5956431">US 5956431</a></span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Apatent&amp;rft.number=5956431&amp;rft.cc=US&amp;rft.title="><span style="display: none;">&nbsp;</span></span> "Fixed-rate block-based image compression with inferred pixel values"</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><span class="citation patent" id="CITEREFIourchaNayakHong1999"><a rel="nofollow" class="external text" href="https://worldwide.espacenet.com/textdoc?DB=EPODOC&amp;IDX=US5956431">US 5956431</a>, Iourcha, Konstantine I.; Nayak, Krishna S. &amp; Hong, Zhou, "System and method for fixed-rate block-based image compression with inferred pixel values", published Sep 21, 1999</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Apatent&amp;rft.number=5956431&amp;rft.cc=US&amp;rft.title=System+and+method+for+fixed-rate+block-based+image+compression+with+inferred+pixel+values&amp;rft.inventor=Iourcha&amp;rft.pubdate=Sep 21, 1999"><span style="display: none;">&nbsp;</span></span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFLiouHuangReynolds1990" class="citation book cs1">Liou, D.-M.; Huang, Y.; Reynolds, N. (1990). "A new microcomputer based imaging system with C/Sup 3/ Technique". <i>IEEE TENCON'90: 1990 IEEE Region 10 Conference on Computer and Communication Systems. Conference Proceedings</i>. <a href="IEEE" class="mw-redirect" title="IEEE">IEEE</a>. pp.&nbsp;<span class="nowrap">555–</span>559. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FTENCON.1990.152671">10.1109/TENCON.1990.152671</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-87942-556-3</bdi>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://dri.freedesktop.org/wiki/S3TC">"S3TC situation on official DRI information page"</a>. Dri.freedesktop.org. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120119112130/http://dri.freedesktop.org/wiki/S3TC">Archived</a> from the original on 2012-01-19<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-01-25</span></span>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.phoronix.com/scan.php?page=article&amp;item=s2tc_s3tc_fix">S2TC: A Possible Workaround For The S3TC Patent Situation</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160513050935/http://www.phoronix.com/scan.php?page=article&amp;item=s2tc_s3tc_fix">Archived</a> 2016-05-13 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a> on <a href="Phoronix" class="mw-redirect" title="Phoronix">phoronix</a></span>
</li>
<li id="cite_note-lwn-714524-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-lwn-714524_6-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFYates2017" class="citation magazine cs1">Yates, Tom (2017-02-15). <a rel="nofollow" class="external text" href="https://lwn.net/Articles/714524/">"This is why I drink: a discussion of Fedora's legal state"</a>. <i><a href="LWN.net" title="LWN.net">LWN.net</a></i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170301064408/https://lwn.net/Articles/714524/">Archived</a> from the original on 2017-03-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2017-02-16</span></span>. <q>...&nbsp;The patent on S3 texture compression expires on October 2, 2017, so Steam games might work better on Fedora after that date.&nbsp;...</q></cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite id="CITEREFDuffy2004" class="citation web cs1">Duffy, Robert (July 27, 2004). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080103155922/http://www.gamershell.com/news/14362.html">"DOOM 3 Video Requirements"</a>. Gamershell.com. Archived from <a rel="nofollow" class="external text" href="http://www.gamershell.com/news/14362.html">the original</a> on January 3, 2008<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-01-25</span></span>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text">Togni, Roberto, et al. "<a rel="nofollow" class="external text" href="http://wiki.multimedia.cx/index.php?title=Apple_RPZA">Apple RPZA</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170704235213/https://wiki.multimedia.cx/index.php?title=Apple_RPZA">Archived</a> 2017-07-04 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a>". MultimediaWiki.</span>
</li>
<li id="cite_note-reed-9"><span class="mw-cite-backlink">^ <a href="#cite_ref-reed_9-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-reed_9-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-reed_9-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFReed" class="citation web cs1">Reed, Nathan. <a rel="nofollow" class="external text" href="http://www.reedbeta.com/blog/understanding-bcn-texture-compression-formats/">"Understanding BCn Texture Compression Formats"</a>. <i>Nathan Reed’s coding blog</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20201109040712/http://www.reedbeta.com/blog/understanding-bcn-texture-compression-formats/">Archived</a> from the original on 2020-11-09<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-09-01</span></span>.</cite></span>
</li>
<li id="cite_note-ryg-10"><span class="mw-cite-backlink">^ <a href="#cite_ref-ryg_10-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-ryg_10-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-ryg_10-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-ryg_10-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFGiesen2021" class="citation web cs1">Giesen, Fabian “ryg” (4 October 2021). <a rel="nofollow" class="external text" href="https://fgiesen.wordpress.com/2021/10/04/gpu-bcn-decoding/">"GPU BCn decoding"</a>. <i>The ryg blog</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230724085332/https://fgiesen.wordpress.com/2021/10/04/gpu-bcn-decoding/">Archived</a> from the original on 24 July 2023<span class="reference-accessdate">. Retrieved <span class="nowrap">24 July</span> 2023</span>.</cite></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.radgametools.com/oodletexture.htm">"Oodle Texture Compression"</a>. <i>www.radgametools.com</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230318033018/http://www.radgametools.com/oodletexture.htm">Archived</a> from the original on 2023-03-18<span class="reference-accessdate">. Retrieved <span class="nowrap">2023-04-03</span></span>.</cite> Open source part mentioned: <a rel="nofollow" class="external text" href="https://github.com/richgel999/bc7enc_rdo">bc7enc_rdo</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210202215707/https://github.com/richgel999/bc7enc_rdo">Archived</a> 2021-02-02 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/BinomialLLC/crunch">"crunch open source texture compression library"</a>. <i>GitHub</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160909164533/https://github.com/BinomialLLC/crunch">Archived</a> from the original on 2016-09-09<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-09-13</span></span>.</cite></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/system/overviews/directstorage/directstorage-overview">"DirectStorage Overview - Microsoft Game Development Kit"</a>. 16 March 2023. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230803135559/https://learn.microsoft.com/en-us/gaming/gdk/_content/gc/system/overviews/directstorage/directstorage-overview">Archived</a> from the original on 3 August 2023<span class="reference-accessdate">. Retrieved <span class="nowrap">3 August</span> 2023</span>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://patft.uspto.gov/netacgi/nph-Parser?Sect2=PTO1&amp;Sect2=HITOFF&amp;p=1&amp;u=/netahtml/PTO/search-bool.html&amp;r=1&amp;f=G&amp;l=50&amp;d=PALL&amp;RefSrch=yes&amp;Query=PN/5956431">US Patent &amp; Trademark Office, Patent Full Text and Image Database, result for US 5956431 A</a></li>
<li><a rel="nofollow" class="external text" href="https://assignment.uspto.gov/patent/index.html#/patent/search/resultAbstract?id=5956431&amp;type=patNum">USPTO Patent Assignment Search for US 5956431 A</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-25" href="https://en.wikipedia.org/wiki/?title=S3_Texture_Compression&amp;oldid=1302500733">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>